פרוטוקול HTTP הפונקציה header שליחת מידע דחוס. עבודה עם cookies Haim Michael. All Rights Reserved.

Similar documents
תצוגת LCD חיבור התצוגה לבקר. (Liquid Crystal Display) המערכת.

ASP.Net MVC + Entity Framework Code First.

DNS פרק 4 ג' ברק גונן מבוסס על ספר הלימוד "רשתות מחשבים" עומר רוזנבוים 1

מערכים Haim Michael. All Rights Reserved.

Rules Game (through lesson 30) by Nancy Decker Preparation: 1. Each rule board is immediately followed by at least three cards containing examples of

טכנולוגיית WPF מספקת למפתחים מודל תכנות מאוחד לחוויית בניית יישומיי

Patents Basics. Yehuda Binder. (For copies contact:

A R E Y O U R E A L L Y A W A K E?

FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO /2014 NYSCEF DOC. NO. 134 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 37

מבוא לתכנות ב- JAVA תרגול 7

ANNEXURE "E1-1" FORM OF IRREVOCABLE STANDBY LETTER OF CREDIT PERFORMANCE OF CONTRACT (WHERE PRICES ARE NOT LINKED TO AN ESCALATION FORMULA)

המבנה הגאומטרי של מידה

דיאגרמה לתיאור Classes

Practical Session No. 13 Amortized Analysis, Union/Find

A JEW WALKS INTO A BAR: JEWISH IDENTITY IN NOT SUCH JEWISH PLACES

זו מערכת ישרת זוית )קרטזית( אשר בה יש לנו 2 צירים מאונכים זה לזה. באותו מישור ניתן להגדיר נקודה על ידי זוית ורדיוס וקטור

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

ל"תוכנה" שכותבים, כמו פונקציה זו, קוראים "קוד"

פעולות קלט פלט Streams( )I\O

Structural Vs. Nominal Typing

תרגול 8. Hash Tables

ניפוי שגיאות )Debug( מאת ישראל אברמוביץ

תקשורת (Networking) הקדמה מבוא לפרוטוקול התקשורת TCP\IP שרת סידרתי מבוסס TCP\IP שיקולים בפיתוח תכניות שרת לקוח שרת מקבילי מבוסס TCP\IP

פרק 2- תכנות. socketים ברק גונן מבוסס על ספר הלימוד "רשתות מחשבים" עומר רוזנבוים 1

קשירות.s,t V שני צמתים,G=(V,E) קלט: גרף מכוון מ- s t ל- t ; אחרת.0 אם יש מסלול מכוון פלט: הערה: הגרף נתון בייצוג של רשימות סמיכות.

Hebrew Ulpan HEB Young Judaea Year Course in Israel American Jewish University College Initiative

FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO /2014 NYSCEF DOC. NO. 102 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 5

Theories of Justice

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

מבוא לרשתות - תרגול מס' 11 Transparent Bridges

אתרים כיום חייבים להיות נגישים יום ולילה מכל מקום בעולם, על כן אפליקציות web שאינן בטוחות חושפות פתח להתקפות על בסיס הנתונים שמקושר לאתר.

Reflection Session: Sustainability and Me

Summing up. Big Question: What next for me on my Israel Journey?

Advisor Copy. Welcome the NCSYers to your session. Feel free to try a quick icebreaker to learn their names.

עץ תורשה מוגדר כך:שורש או שורש ושני בנים שכל אחד מהם עץ תורשה,כך שערך השורש גדול או שווה לסכום הנכדים(נכד-הוא רק בן של בן) נתון העץ הבא:

Relationships: Everything Else is Commentary

המחלקה למדעי המחשב, אוניברסיטת בן גוריון מבני נתונים, סמסטר אביב 2102 עבודת בית מספר - 2 מעשית

מכונת מצבים סופית תרגול מס' 4. Moshe Malka & Ben lee Volk

פקס בחיבור המכשיר המשולב לפקס יש לעבור על השלבים הבאים: - חבר את כבל הטלפון לחיבור ה- LINE בגב המדפסת ואת צידו השני לשקע הטלפון בקיר.

Name Page 1 of 5. ,דף ד: This week s bechina starts at the bottom of שיר של חול

מבחן באנגלית בהצלחה הצלחה!!! שם פרטי: שם משפחה: מס' תעודת זהות: תאריך: שם מרכז מנהל מרכז השכלה: תאריך בדיקת המבחן: כל הזכויות שמורות למשרד החינוך

פרצות אבטחה נפוצות בהעלאת קבצים בעזרת PHP

A Long Line for a Shorter Wait at the Supermarket

ראש השנה דף. a) the עדים that come first are examined first. b) the גדול שבהן are examined first.

כפתור רדיו בחירה בודדת מתוך רשימת אפשרויות

Computer Structure. Exercise #1 יש להגיש את התשובות הסופיות על גבי טופס זה.

Yetzer Shalom: Inclinations of Peace

Adam: Meet Haman. A Sermon Delivered by Rabbi Haskel Lookstein on Shabbat Bereishit October 25, 2008

Operating Systems, 142. Practical Session 12 File Systems, part 2

בוחן בתכנות בשפת C בצלחה


Genetic Tests for Partners of CF patients

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

מסנן סולארי: הוראות שימוש

מדריך לניהול VPS טריפל סי מחשוב ענן בע"מ.

THINKING ABOUT REST THE ORIGIN OF SHABBOS

Name Page 1 of 6. דף ט: This week s bechina starts at the two dots in the middle of

ראש השנה דף. a) the עדים that come first are examined first. b) the גדול שבהן are examined first. Answer: a

IBM System x3690 X5 תושבות. בלבד" מסוג.Nehalem EX במיוחד. Intel Xeon Nehalem EX 32 עד 64 רכיבי DIMM מסוג DDR3

מבוא לאסמבלי מאת אופיר בק חלקים נרחבים ממאמר זה נכתבו בהשראת הספר "ארגון המחשב ושפת סף" אשר נכתב ע"י ברק גונן לתוכנית גבהים של משרד החינוך.

אנגלית (MODULE E) בהצלחה!

הבסיס כתיבת התכנית הראשונה שימוש במשתנים. הטיפוס הבסיסי object. הטיפוס הבסיסי string משפטי בקרה. שימוש ב- Enumerations. שימוש ב- Namespaces

First Approach: Kiddush Hashem

And now Israel, what does Hashem your G-d ask from you but to revere Hashem your G-d

TORAH BOWL PRACTICE QUESTIONS

FULL ARTICLE ACTIVE DIRECTORY

ASTM UL / FM / BS abesco

אנגלית שאלון ז' ג רסה א' הוראות לנבחן בהצלחה! )4( ההנחיות בשאלון זה מנוסחות בלשון זכר ומכוונות לנבחנות ולנבחנים כאחד. (MODULE G)

מדריך המוצר של GFI מסייע ארכיו ן

T H E S U N F L O W E R L I M I T S T O F O R G I V E N E S S

ראש השנה דף. 1. A) Our משנה says,... שנראה בעליל בין שלא נראה בעליל.בין Based on this,פסוק what does the word עליל mean?

תורשכ ירפס לכ ץבוק " ב י קלח יללכ רעש

ניסוי בפייתון מכון טכנולוגי לישראל הניסוי מתקיים בבניין פישבך, חדר 573 )במסדרון למאייר(. המאחר ביותר מ- 53 דקות לא יורשה לבצע את הניסוי.

CML כנס שנתי של מודעות ל- CML 4-6 לאוקטובר 2018, מלון רמדה, חדרה

אוניברסיטת בן גוריון בנגב

Homework 10. Theoretical Analysis of Service Stations in Steady State. Priority Queues.

מדריך למשתמש התקנה עצמית

FAIL CONFR URE ONTING

מדריך למשתמש התקנה עצמית

Hebrew Adjectives. Hebrew Adjectives fall into 3 categories: Attributive Predicative Substantive

JUDAISM AND INDIVIDUALITY

Expressions (ex 8) Wild World (ex 7) Cars (ex 9)

WHAT IS THE PSHAT OF A METAPHORICAL MITZVAH?

חטיבת המינרלים החיוניים תתמקד בשוקי האגרו וחטיבת הפתרונות המיוחדים תשמש כחטיבה התעשייתית; כיל דשנים מיוחדים תשולב בחטיבת המינרלים החיוניים;

קובץ לימוד י"ג אייר ר' ישראל ארי' ליב שניאורסון לה ק ואנגלית תרס"ו-תשי"ב ( )

SPSS 10.0 FOR WINDOWS

שאלות חזרה לקראת מבחן מפמ"ר אינטרנט וסייבר

Chofshi.

חטיבת הביניים "יונתן" עבודה לקיץ באנגלית לבוגרי כיתה עבודה נעימה!

Parallel Processing. Administration. Dr. Guy Tel-Zur.

מנגנוני אימות דוא"ל 65%-50%(. ברוב המקרים האלו,

Growing Day by Day. In the beginning of משה,שמות hadn t yet had enough time to grow spiritually, and is therefore referred to as.

NTFS ADS Magic Tricks

Rabbi Chaiyim Hirschensohn on International Law, Human Rights and the Temple Mount

FULL ARTICLE ACTIVE DIRECTORY

מושגים בסיסיים תלמידים והורים יקרים,

sharing food intro price & extra drinks * ניתן להזמין מנות כשרות בתאום מראש for good memories

זה. Nir Adar

defile my holy name and I shall be sanctified among the children of Israel. I am Hashem who sanctifies you.

Transcription:

1 ה- Headers HTTP פרוטוקול HTTP הפונקציה header שליחת מידע דחוס ה- Cashing Browser עבודה עם cookies

2 פרוטוקול HTTP כאשר הדפדפן מקבל קובץ משרת זה מתרחש בהמשך לבקשה לקבלת הקובץ אשר נשלחת מהדפדפן לשרת. בקשה שנשלחת מדפדפן לשרת כוללת HTTP Headers שמספקים אינפורמציה נוספת. GET / index.html HTTP/1.1 Host: www.xperato.com Accepted-Encoding: UTF-8 User-Agent: Fireworks/1.2 בדוגמא זו רואים בקשה שיוצאת מדפדפן לשרת בבקשה לקבל ב- GET קובץ בשם.index.html כמו כן. הבקשה כוללת headers שמספקים פרטים נוספים. מ- headers אלה ניתן ללמוד שהבקשה נעשית על פי הכללים של,HTTP 1.1 הדפדפן מסוגל לקבל קבצים ב- encoding מסוג UTF-8 וסוג הדפדפן ששולח את הבקשה הוא Fireworks מגירסה 1.2. כאשר השרת מחזיר את תשובתו בהמשך לקבלת הבקשה הוא שולח אותה בצירוף headers שמספקים אינפורמציה נוספת. HTTP/1.1 200 OK Server: Apache Content-Type: text/html Content-Encoding: UTF-8 Content-Length: 232332 בדוגמא זו ניתן לראות בתשובה שמגיעה מהשרת פרטים נוספים ) (headers אשר מספקים את הפרטים הבאים: התשובה בפרוטוקול,HTTP 1.1 הקובץ הנדרש נמצא בהצלחה (סטטוס קוד 200), השרת ששולח את התשובה הוא מסוג,Apache סוג הקובץ שנשלח חזרה הוא טקסט (וליתר דיוק:,(HTML הטקסט ב- encoding מסוג UTF-8 (פרט חשוב עבור הדפדפן כדי שידע כיצד להציג את הטקסט שהגיע) ואורך התשובה כולה הוא 232332 בתים. כל HTTP Header הוא צירוף פשוט של key עם value בפורמט טקסטואלי פשוט. כל HTTP Header נשלח בשורה נפרדת. סימן של שורה חדשה מפריד בין כל אחד מה- headers לאחרים וסימן של שורה חדשה מפריד גם בין ה- headers והתוכן שמגיע בחזרה. שרת ה- web ומנוע ה- PHP מטפלים באופן אוטומאטי בשליחת ה- headers.

3 הפונקציה header פונקציה זו מאפשרת שליחה בחזרה לדפדן שורת HTTP Header נוספת שאנחנו יוצרים. בהפעלתה ניתן לשלוח ארגומנט אחד אשר כולל גם את שם ה- header וגם את ערכו. header( Content-type: text/html ); בשורה זו אנו גורמים להתווספות של שורת header נוסף אשר מעיד על כך שה- type content של תשובת השרת היא.text/html header("location: http://www.jacado.com"); בשורה זו אנו גורמים להתווספות של שורת header נוסף אשר מיידע את הדפדפן בכך שהמסמך המבוקש נמצא בכתובת URL אחרת ובכך גורם לדפדפן לפנות אל אותה כתובת.URL header( HTTP/1.0 404 Not Found ); בשורה זו אנו גורמים להתווספות של שורת header נוסף אשר מיידע את הדפדפן בסטטוס קוד של תשובת השרת לפניה שקיבל. כאשר קוראים להפעלת הפונקציה header יש לעשות זאת לפני שמבצעים פעולות output כלשהן... לרבות ריווחים לבנים מחוץ לגבולות תגיות ה- PHP. הימנעות מכלל זה עלולה לגרום לשגיאה בצד השרת במהלך הניסיון לסיים בהצלחה את הקריאה להפעלת הפונקציה.headers הדוגמא הבאה מציגה שימוש בסיסי בפונקציה.header <?php header("content-type: text/xhtml"); header("expires: Mon, 22 Jul 2047 05:00:00 GMT"); echo "If you want to see the headers try to browse this page via one of the following web based sniffers:"; echo "<BR>http://webtools.mozilla.org/web-sniffer/"; echo "<BR>http://www.delorie.com/web/headers.html"; echo "<BR>http://www.rexswain.com/httpview.html";?>

4 שליחת מידע דחוס פרוטוקול HTTP תומך בשליחת מידע דחוס (באמצעות ה- gzip אלגוריתם). דרגת הדחיסות האפשרית נעה בין 1 ו- 9. ברירת המחדל היא 6. כאשר שרת מחזיר לדפדפן תשובה בפורמט gzip ה- Content-Encoding מוחזר עם הערך. gzip" HTTP/1.1 200 OK Server: Apache Content-Type: text/html Content-Encoding: gzip Content-Length: 26434 תשובה של שרת בפורמט דחוס (gzip) עשוייה להיראות כדלקמן. ומייד לאחר headers אלה יופיע המידע הדחוס בפורמט.gzip באמצעות הפעלת הפונקציה ob_start נוכל לגרום להפעלת ה- buffering.output אפשר לקרוא להפעלתה מבלי לשלוח ארגומנטים. אחד הארגומנטים שניתן לשלוח לפונקציה זו בעת הפעלתה הוא הגודל של הבאפר שיהיה בפועל. ארגומנט אחר שניתן לשלוח הוא שמה של פונקציה שתופעל בכל עת שהבאפר מתמלא. זו תהיה פונקציה שתקבל כארגומנט את הנתונים שעומדים להישלח חזרה ללקוח ובתגובה תחזיר את התשובה שתוחזר בפועל. הפונקציה ob_start מחזירה true אם הצליחה בפעולתה ו- false אם נכשלה. כדי לגרום לשליחת התשובה חזרה בפורמט דחוס (gzip) יש לקרוא להפעלת הפונקציה ob_start ולשלוח אליה את שם הפונקציה.ob_gzhandler ob_start( ob_gzhandler ); שורה זו גורמת לקריאה להפעלת הפונקציה ob_start באופן שבכל עת שהבאפר מתמלא תוכנו יישלח אל הפונקציה ob_gzhandler והערך שהיא מחזירה הוא זה שיוחזר חזרה לדפדפן.

5 <?php ob_start("ob_gzhandler");?> <html><body><p> If your browser supports receiving compressed data then this page was received in a compressed.</p></body></html> ניתן לשלוט באופן שבו ה- engine PHP מאפשר שליחת נתונים בצורה דחוסה באמצעות עידכון הפרמטרים המתאימים בקובץ.php.ini zlib.output.compression = on zlib.output.compression.level = 9

6 ה- Caching Browser רוב הדפדפנים משתמשים ב- memory cache כדי לשפר את ביצועיהם. בכל עת שהדפדפן מצפה לקבל קובץ מסויים הוא בודק תחילה אם הקובץ זמין ב- memory cache ואם הקובץ בשרת איננו עדכני יותר. במידה שהקובץ ששמור ב- memory cach עדכני הדפדפן משתמש בו. באמצעות ה- Control Cache וה- Expires, שני headers שניתן לשלוט בערכם בתשובה שמוחזרת לדפדפן ניתן להורות לדפדפן לשמור (או לא לשמור) את התשובה שנשלחת בזיכרון ה- memory cache ובמידה שמורים לדפדפן לשמור את התשובה אז ניתן לקבוע עבורו את תאריך ה- expires של התשובה המוחזרת. header( Cache-Control: no-cache, must-revalidate ); שורה זו תיגרום לכך שהתשובה שמוחזרת לדפדפן לא תישמר בזיכרון ה- memory.cache header( Expires: Mon, 31 Jan 2008 02:55:22 GMT ); שורה זו תגרום לכך שהתשובה שמוחזרת לדפדפן תישמר ב cache memory בתוספת תאריך תפוגה. בכך יובטח שהקובץ שיישמר ב cache memory לא ישמש את הדפדפן במידה שתאריך התפוגה כבר פג.

7 עבודה עם cookies ה- cookie היא פיסת מידע טקסטואלי מצומצם שהדפדפן קיבל משרת מסויים. לכל cookie יש, בין היתר, שם וערך. כדי לגרום לדפדפן לשמור cookie במחשב שעליו הוא רץ יש לשלוח אליו בתשובה שמגיעה מהשרת את ה- header המתאים שיגרום להיוווצרות ה-.cookie בכל עת שהדפדפן פונה שוב לשרת שבעבר גרם להיווצרות של עוגיה אצלו הדפדפן כולל בפנייתו לשרת את אותה עוגיה (בהנחה שהעוגיה עדיין בחיים (טרם פגה). כדי לגרום לכך שהתשובה שחוזרת לדפדפן ממסמך ה- PHP תיכלול את ה- header המתאים (כדי לגרום להיווצרות עוגיה) יש לקרוא להפעלת הפונקציה.setcookie בדומה לאופן העבודה עם פונקציות אחרות שמשפיעות על ה- headers גם בהפעלת פונקציה זו יש לוודא שאנו מפעילים אותה לפני שנכתב מידע כלשהו חזרה לדפדפן. בעת הקריאה להפעלת setcookie קיימים ארגומנטים רבים שניתן לשלוח. ארגומנט אחד חייבים תמיד לשלוח וזהו השם של ה-.cookie setcookie( id,1232323); שורה זו גורמת להיווצרות עוגיה חדשה ששמה id והערך שהיא מחזיקה הוא 1232323. כיוון שלא נשלח לפונקציה ארגומנט שמתייחס למשך חייה היא תהיה בחיים כל עוד ה- session בחיים. כאשר ה- session מסיים את חייו גם העוגיה מסיימת את חייה. כדי לגרום לכך שהעוגיה שנוצרת תמשיך בחייה גם לאחר מות ה- session יש לשלוח אל הפונקציה setcookie גם את ה- date,expiration ערך מספרי אשר מתאר באלפיות השניה את המועד שבו העוגיה תסיים את חייה. setcookie( id, 1000232,time()+86400*3); שורה זו תגרום לדפדפן להחזיק את העוגיה בחיים לפרק זמן של 3 ימים. הדפדפן יעשה זאת באמצעות שמירת העוגיה כקובץ טקסטואלי קטן על המחשב.

8 בכל עת שמתרחשת פנייה של הדפדפן לאתר שבעבר יצר אצל הדפדפן cookie ובמידה שה- cookie עדיין בחיים אז ה- cookie יישלח יחד עם הפנייה לשרת. ה- Engine PHP מזהה באופן אוטומטי את כל ה- cookies שמגיעים יחד עם ה- request שמגיע מהדפדפן, מפריד אותם מה- request ושם אותם במערך גלובלי בשם.$_COOKIE ה- keys הם שמות העוגיות וה- values הם הערכים שלהם. במידה שאנו מצפים לעוגיה מסויימת ואנו יודעים את שמה ניתן לקבל את ערכה באופן מיידי באמצעות פניה למערך הגלובלי. שורת קוד זו מחלצת למעשה את ערכה של העוגיה id ומאחסנת אותו בתוך המשתנה.id_val $id_val = $_COOKIE['id']; ניתן לקבוע את ערכה של עוגיה חדשה שיוצרים תוך שימוש בתחביר המשמש לעבודה עם מערכים ובדרך זו לגרום להיווצרותה של עוגיה שבמקום value אחד יש לה אוסף של values שהגישה אליהם נעשית בדומה לאופן שבו ניגשים לאיברי מערך. setcookie( names[0], moshe ); setcookie( names[1], david ); setcookie( names[2], john ); שורות קוד אלה גורמות להיווצרות cookie ששמו names ושבמקום ערך אחד יש לו אוסף של ערכים. חילוץ הערכים הללו בכל ביקור חוזר של הגולש ייעשה באופן דומה. $vec = $_COOKIE['names']; echo $vec[0]; // printing moshe echo $vec[1]; // printing david echo $vec[2]; // printing john אין כל דרך להורות לדפדפן למחוק עוגיה מסויימת. עם זאת, ניתן באופן עקיף להשיג תוצאה דומה. קיימות שתי דרכים. דרך אחת באמצעות הפעלת הפונקציה setcookie וקביעתה של עוגיה בשם זהה עם ערך שלילי כמועד ה- expiration שלה. פעולה זו תגרום לכך שהעוגיה תסיים את חייה מייד עם תום ה- session. דרך שניה כרוכה גם היא בהפעלת הפונקציה setcookie והיא כוללת את השמת הערך false בתור ה- value של ה- cookie.